package com.springboot.common;

/**
 * 通用响应结果类
 */
public class Result {
    private String status;
    private String code;
    private String message;
    private Object data;

    /**
     * 返回带消息的成功结果(不带数据)，默认使用204状态码
     *
     * @param message 成功消息（若为null则使用枚举默认消息）
     * @return Result对象
     */
    public static Result success(String message) {
        Result result = new Result();
        result.setStatus("success")
                .setCode(ResponseCode.SUCCESS_NO_CONTENT.getCode())
                .setMessage(message != null ? message : ResponseCode.SUCCESS_NO_CONTENT.getMessage());
        return result;
    }

    /**
     * 返回带结果的成功结果(不带消息)，默认使用200状态码
     * @param data 结果
     * @return Result对象
     */
    public static Result success(Object data) {
        Result result = new Result();
        result.setStatus("success")
                .setCode(ResponseCode.SUCCESS.getCode())
                .setData(data);
        return result;
    }

    /**
     * 返回带数据和消息的成功结果，默认使用200状态码
     *
     * @param data    响应数据
     * @param message 成功消息（若为null则使用枚举默认消息）
     * @return Result对象
     */
    public static Result success(Object data, String message) {
        Result result = new Result();
        result.setStatus("success")
                .setCode(ResponseCode.SUCCESS.getCode())
                .setData(data)
                .setMessage(message != null ? message : ResponseCode.SUCCESS.getMessage());
        return result;
    }

    /**
     * 返回默认错误结果（默认使用-1错误码）
     *
     * @param message 错误消息（若为null则使用枚举默认消息）
     * @return Result对象
     */
    public static Result error(String message) {
        Result result = new Result();
        result.setStatus("error")
                .setCode(ResponseCode.BUSINESS_ERROR.getCode())
                .setMessage(message != null ? message : ResponseCode.BUSINESS_ERROR.getMessage());
        return result;
    }


    /**
     * 返回自定义错误结果
     *
     * @param code 自定义错误码
     * @param message 自定义消息
     * @return Result对象
     */
    public static Result errorCustomer(String code,String message){
        Result result=new Result();
        result.setStatus("error")
                .setCode(code)
                .setMessage(message);
        return result;
    }

    /**
     * 根据枚举返回错误结果（推荐使用，统一管理code和message）
     *
     * @param responseCode 响应码枚举
     * @return Result对象
     */
    public static Result error(ResponseCode responseCode) {
        Result result = new Result();
        result.setStatus("error")
                .setCode(responseCode.getCode())
                .setMessage(responseCode.getMessage());
        return result;
    }

    /**
     * 根据枚举和自定义消息返回错误结果（灵活覆盖消息）
     *
     * @param responseCode 响应码枚举
     * @param message      自定义错误消息（覆盖枚举默认消息）
     * @return Result对象
     */
    public static Result error(ResponseCode responseCode, String message) {
        Result result = new Result();
        result.setStatus("error")
                .setCode(responseCode.getCode())
                .setMessage(message);
        return result;
    }

    // 以下为原有的setter和getter（保持不变）
    public Result setStatus(String status) {
        this.status = status;
        return this;
    }

    public Result setCode(String code) {
        this.code = code;
        return this;
    }

    public Result setMessage(String message) {
        this.message = message;
        return this;
    }

    public Result setData(Object data) {
        this.data = data;
        return this;
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }

    public Object getData() {
        return data;
    }

    public String getStatus() {
        return status;
    }
}